Spring Cloud Gateway 路径重写正则表达式的理解 (RewritePath GatewayFilter Factory) 您所在的位置:网站首页 discretized segment什么意 Spring Cloud Gateway 路径重写正则表达式的理解 (RewritePath GatewayFilter Factory)

Spring Cloud Gateway 路径重写正则表达式的理解 (RewritePath GatewayFilter Factory)

2023-11-26 19:00| 来源: 网络整理| 查看: 265

首先

官网对于 RewritePath GatewayFilter Factory 的解释是这样的:

spring: cloud: gateway: routes: - id: rewritepath_route uri: https://example.org predicates: - Path=/red/** filters: - RewritePath=/red(?/?.*), $\{segment}

对于请求路径 /red/blue,当前的配置在请求到到达前会被重写为 /blue,由于YAML的语法问题,$符号后面应该加上\

然后

在解释正则表达式前,我们需要学习一下java正则表达式分组的两个概念:

命名分组:(?capturing text) 将匹配的子字符串捕获到一个组名称中,后面可通过分组名获得匹配结果。例如这里的示例,就是将 capturing text 捕获到名称为 name 的组中

引用捕获文本:${name} 将名称为name的命名分组对应的内容替换到此处

那么就很好解释官网的这个例子了, 对于配置文件中的: - RewritePath=/red(?/?.*), $\{segment}详解:

(?/?.*): ? 名称为 segment 的组/? 字符/出现0次或1次.* 任意字符出现0次或多次

合起来就是:将 /?.*匹配到的结果捕获到名称为segment的组中

$\{segment}:

将名称为 segment 的分组捕获到的文本置换到此处。 注意,\的出现是由于避免 yaml 语法认为这是一个变量(因为在 yaml 中变量的表示法为 ${variable},而这里我们想表达的是字面含义),在 gateway 进行解析时,会被替换为 ${segment}

最后

业务举例: 将 https://spring.io/projects/** 这个路径重写为 https://spring.io/regexp/**

spring: cloud: gateway: routes: - id: rewritepath_route uri: https://spring.io predicates: - Path=/projects/** filters: - RewritePath=/projects(?/?.*), /regexp$\{segment}

黑暗驱散不了黑暗,只有光明才可以; 仇恨驱散不了仇恨,只有爱才可以。

—— Martin Luther King



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有